% 最小二乘法的 Matlab 实现

% 解方程组方法
x=[3 6 7 12 16]';
y=[19.0 32.3 49.0 73.3 197.8]';
r=[ones(5,1),x.^2];
ab=r\y; % 左除就是求解
x0=2:0.1:17;
y0=ab(1)+ab(2)*x0.^2;
plot(x,y,'o',x0,y0,'r')

% 多项式拟合方法
    % a=polyfit(x0,y0,m);
    % 其中输入参数 x0,y0 为要拟合的数据， m 为拟合多项式的次数，输出参数 a 为拟合多项
    % 式 y=am*x^m+…+a1*x+a0 系数 a=[ am, …, a1, a0]。
    % 多项式在 x 处的值 y 可用下面的函数计算
    % y=polyval(a,x)
x=[3 6 7 12 16]';
y=[19.0 32.3 49.0 73.3 197.8]';
for m=1:4
    a=polyfit(x,y,m);
    x0=2:0.1:17;
    y0=polyval(a,x0);
    subplot(2,2,m)
    hold on
    plot(x,y,'o',x0,y0,'r')
    grid on
    hold off
end